#include "../include/head.h"

// 菜单信息 - 登陆用
const wchar_t *title = L"普通用户菜单";
const wchar_t *option_1[] = {L"登录", L"注册", L"返回"};

// 菜单信息 - 管理员用
const wchar_t *title_root = L"欢迎管理员用户登录";
const wchar_t *option_root[] = {
    L"设定航班",
    L"修改航班",
    L"修改普通用户",
    L"增加超级用户",
    L"退出登录"};

// 菜单信息 - 普通用户用
const wchar_t *title_user = L"欢迎普通用户登录";
const wchar_t *option_user[] = {
    L"购票退票",
    L"余额充值",
    L"查看航班",
    L"修改密码",
    L"我的订单",
    L"退出登录"};

// 购票界面
const wchar_t *title_ticke = L"欢迎购票";
const wchar_t *option_ticke[] = {
    L"购票",
    L"退票",
    L"返回"};

// 菜单信息 - 航班增减
const wchar_t *title_flight = L"欢迎普通用户登录";
const wchar_t *option_flight[] = {
    L"增加航班",
    L"删除航班"};

// 按回车继续
void Press_Enter_To_Continue(void)
{
    char ch = ' ';

    while (ch != 10)
    {
        ch = getchar();
    }
}

// 根据用户来判定是那一条链表
U_list *By_Data_Judge_List(FlightSystem Flight_sys, U_data data)
{
    switch (data.grade)
    {
    case GRADE_ADMIN:
        return Flight_sys.ADMIN_USER;
    case GRADE_REGULAR:
        return Flight_sys.REGULAR_USER;
    case GRADE_GOLD:
        return Flight_sys.GOLD_USER;
    case GRADE_PLATINUM:
        return Flight_sys.PLATINUM_USER;
    case GRADE_SILVER:
        return Flight_sys.SILVER_USER;
    }
    return NULL;
}

// 根据用户来判定对应的文件
const char *By_User_Judge_File(U_data data)
{
    switch (data.grade)
    {
    case GRADE_ADMIN:
        return ADMIN_FILE;
    case GRADE_REGULAR:
        return REGULAR_FILE;
    case GRADE_GOLD:
        return GOLD_FILE;
    case GRADE_PLATINUM:
        return PLATINUM_FILE;
    case GRADE_SILVER:
        return SILVER_FILE;
    }
    return NULL;
}

// 根据用户来返回对应折扣
double By_User_Judge_Discount(U_data data)
{
    switch (data.grade)
    {
    case GRADE_ADMIN:
        return 0;
    case GRADE_REGULAR:
        return 1;
    case GRADE_GOLD:
        return GOLD_DISCOUNT;
    case GRADE_PLATINUM:
        return PLATINUM_DISCOUNT;
    case GRADE_SILVER:
        return SILVER_DISCOUNT;
    }
    return 0;
}

// 系统初始化
FlightSystem Sys_init(void)
{
    FlightSystem Flight_sys;
    Flight_sys.Flight_list = D_List_init();      // 航班信息
    Flight_sys.ADMIN_USER = S_List_init();       // 管理员账户信息
    Flight_sys.REGULAR_USER = S_List_init();     // 普通用户信息
    Flight_sys.SILVER_USER = S_List_init();      // 银卡会员信息 (9折)
    Flight_sys.GOLD_USER = S_List_init();        // 金卡会员信息 (8折)
    Flight_sys.PLATINUM_USER = S_List_init();    // 白金会员信息 (7折)
    Flight_sys.User_Flight_Infor = S_Arr_Init(); // 用户航班信息表

    // 从文件中导入数据
    D_List_file_scanf(Flight_sys.Flight_list);                        // 航班信息
    S_List_File_scanf(Flight_sys.ADMIN_USER, ADMIN_FILE);             // 管理员账户信息文件
    S_List_File_scanf(Flight_sys.REGULAR_USER, REGULAR_FILE);         // 普通用户信息文件
    S_List_File_scanf(Flight_sys.SILVER_USER, SILVER_FILE);           // 银卡会员信息文件 (9折)
    S_List_File_scanf(Flight_sys.GOLD_USER, GOLD_FILE);               // 金卡会员信息文件 (8折)
    S_List_File_scanf(Flight_sys.PLATINUM_USER, PLATINUM_FILE);       // 白金会员信息文件 (7折)
    S_Arr_File_scanf(Flight_sys.User_Flight_Infor, USER_FLIGHT_FILE); // 用户航班信息表
    system("clear");
    return Flight_sys;
}

// 系统登录
U_data Sys_log_in(FlightSystem Flight_sys)
{
    // 用户信息合表
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)

    // 开始登录
    U_data log_data = Log_in(list);
    return log_data;
}

// 普通用户菜单
int Login_Menu(void)
{
    return display_menu(title, option_1, 3);
}

// 设定航班界面菜单
int Flight_Interface(void)
{
    return display_menu(title_flight, option_flight, 2);
}

// 购票界面菜单
int Ticke_Tpurchase_Interface(void)
{
    return display_menu(title_ticke, option_ticke, 3);
}

// 系统菜单
void Sys_menu(FlightSystem Flight_Sys, F_list *Flight_list, U_data log_data)
{
    // 分支
    while (1)
    {
        int flag = 0;
        switch (log_data.grade)
        {
        case 1:
            // 管理员功能界面
            printf("欢迎管理员用户登陆\n");
            flag = display_menu(title_root, option_root, 5);
            break;
        default:
            // 普通用户功能界面
            printf("欢迎普通用户登陆\n");
            flag = display_menu(title_user, option_user, 6) + 5;
            break;
        }

        // 菜单选项分支处理
        switch (flag)
        {
            // 管理员 - 设定航班
        case 1:
        {

            switch (Flight_Interface()) // 航班UI
            {
            case 1:
                // 增加航班
                Set_flight_infor(Flight_list, log_data);
                break;
            case 2:
                // 删除航班
                Deleting_flight_infor(Flight_list, log_data);
                break;
            case 3:
                // 返回
                break;
            }
        }
        break;
            // 管理员 - 修改航班
        case 2:
        {
            Modify_flight_infor(Flight_list, log_data);
        };
        break;
        // 管理员 - 修改普通用户
        case 3:
        {
            Modify_user_infor(Flight_Sys, log_data);
        }
        break;
        // 管理员 - 增加超级用户
        case 4:
        {
            Add_root(Flight_Sys, log_data);
        }
        break;
            // 退出
        case 5:
        {
            // 退出
            return ;
        }
        case 6:
        {
            system("clear");
            switch (Ticke_Tpurchase_Interface()) // 购票UI
            {
            case 1:
                // 购票
                User_ticket_purchase(Flight_Sys, log_data);
                break;
            case 2:
                // 退票
                User_refund_ticket(Flight_Sys, log_data);
                break;
            case 3:
                // 返回
                break;
            }
        };
        break;
            // 用户 - 余额充值
        case 7:
        {
            system("clear");
            Balance_Recharge(Flight_Sys, log_data);
        }

        break;
        // 用户 - 查看航班
        case 8:
        {
            system("clear");
            Check_Flight(Flight_Sys.Flight_list);
        }
        break;
        // 用户 - 修改密码
        case 9:
        {
            system("clear");
            Change_Password(Flight_Sys, log_data);
        }
        break;
            // 用户 - 我的订单
        case 10:
        {
            system("clear");
            Check_indent(Flight_Sys, log_data);
        }
        break;
        case 11:
            // 退出
            return ;
            break;
        }
    }
}
